﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Net.Configuration;
using System.Net.Mail;
using System.Text;
using System.Threading;
using LinkCard.Model;

namespace LinkCard.Dao
{
   public class NewsLetterDao
    {
        public bool Deactive(string code)
        {
            using (TopLinkEntities db = new TopLinkEntities())
            {
                Members mem =
                    db.Members.Where(e => e.Code.ToLower() == code.ToLower()).FirstOrDefault();
                if (mem == null)
                    throw new Exception("wrongcode");

                mem.Status = false;
                mem.Code = "";
                db.SaveChanges();
                return true;
            }
        }

        public int Register(string membername, string email)
        {
            try
            {
                Members mem = new Members();
                mem.Name = membername;
                mem.Email = email;
                mem.Status = true;
                mem.DateCreated = DateTime.Now;
                mem.Code = Guid.NewGuid().ToString();

                using (TopLinkEntities db = new TopLinkEntities())
                {
                    bool sendactivemail = true;
                    Members registered = db.Members.Where(e => e.Email.ToLower() == email.ToLower()).FirstOrDefault();
                    if (registered != null)
                    {
                        return 2;
                        //registered.Status = true;
                        //registered.Code = mem.Code;
                        //sendactivemail = false;
                    }
                    else
                    {
                        db.AddToMembers(mem);
                    }
                    db.SaveChanges();
                    if (sendactivemail)
                    {
                        SendConfirmEmail(mem.Email, mem.Code);
                    }
                    return 1;
                }
            }
            catch (Exception)
            {
                return 0;
            }
        }

        public bool SendConfirmEmail(string email, string code)
        {
            try
            {
                string domain = ConfigurationManager.AppSettings["Domain"];
                //string cflink = domain + "/Confirm.aspx?code=" + code;
                string subject = "Đăng ký nhận bản tin thành công!";
                string content = "";
                content += "Xin chào bạn " + email + "<br/><br>";
                content += "Cám ơn bạn đã gia nhập cộng đồng thẻ <a href='" + domain + "'>Link Card</a><br/>";
                content += "<br/>";
                content += "Nếu bạn không phải là người đã sử dụng email này để đăng kí nhận bản tin, xin hãy thông báo cho chúng tôi qua số hotline: 0903.22.65.65 để được Hỗ trợ<br/>";
                //content += "<a href='" + cflink + "&s=0'>Gỡ bỏ</a><br/>";
                //content += "(hoặc copy và dán đoạn địa chỉ sau vào trình duyệt của bạn: <u style='color:blue;'>" + cflink + "&s=0</u>)";
                content += "<br/>";
                content += "Trân trọng,<br/>";
                content += "-----------------------------------<br/>";
                content += "TopLink Viet Nam.,Jsc<br/>";
                content += "Head Office: 5th floor, AAC Building, 226 An Trach Street, Dong Da District, Hanoi<br/>";
                content += "Tel: (84-4) 39440216 / Mobile: 0986. 927.688<br/>";
                content += "Email: admin@linkcard.com.vn<br/>";
                content += "Website: www.toplink.com.vn";

                List<string> tos = new List<string>();
                tos.Add(email);
                SendMail(tos, subject, content);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
        public static bool SendRegisterEmail(string email, string code, string mobilenumber, string customerid)
        {
            try
            {
                string domain = ConfigurationManager.AppSettings["Domain"];
                string emailInform = ConfigurationManager.AppSettings["RegisterInformEmail"];
                string cflink = domain + "/Confirm.aspx?type=reg&code=" + code;
                string subject = "Đăng ký thành công thẻ LinkCard - Khách hàng: " + mobilenumber;
                string content = "";
                content += "Xin chào,<br/>";
                content += "Chúc mừng quý khách đã trở thành thành viên của LinkCard.<br>";
                content += "Để hoàn thành việc đăng ký, quý khách vui lòng gọi điện đến cho hotline của chúng tôi: 0927.58.58.58<br>";
                //content += "Chủ tài khoản: <b>Công ty CP Toplink Việt Nam</b><br>";
                //content += "Số tài khoản: <b>03701010002338 tại Ngân hàng Maritime bank – CN Trần Duy Hưng</b><br>";
                content += "Chúng tôi sẽ chuyển thẻ thành viên tới tay Quý khách trong vòng 3 – 5 ngày sau khi quý khách hoàn thành các thủ tục theo yêu cầu.<br>";
                content += "Trân trọng cảm ơn.<br/>";
                content += "LinkCard";
                List<string> tos = new List<string>();
                tos.Add(email);
                SendMail(tos, subject, content);

                string subjectSupport = "Đăng ký thẻ LinkCard - Khách hàng: " + mobilenumber;
                string contentSupport = "";
                contentSupport += "Đăng kí thành công cho khách hàng số điện thoại: " + mobilenumber + ", email: " + email + "<br>";
                contentSupport += "<br/>";
                contentSupport += "Mã khách hàng: " + customerid + "<br>";
                List<string> tosSupport = new List<string>();
                tosSupport.Add(emailInform);
                SendMail(tosSupport, subjectSupport, contentSupport);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        public static bool SendMail(List<string> mailto, string subject, string content)
        {
            SmtpSection cfg = GetMailConfig();

            string fromaddress = ""; //ConfigurationManager.AppSettings["NewsLetterMail"];
            string pass = "";//ConfigurationManager.AppSettings["NewsLetterPassword"];
            string host = "";
            int port = 0;
            fromaddress = cfg.Network.UserName;
            pass = cfg.Network.Password;
            host = cfg.Network.Host;
            if (cfg.Network.Port > 0)
            {
                port = cfg.Network.Port;
            }
            string displayName = ConfigurationManager.AppSettings["NewsLetterDisplayName"];
            MailMessage mail = new MailMessage();
            mail.Subject = subject;
            mail.From = new MailAddress(fromaddress, displayName);
            mail.Body = content;
            mail.IsBodyHtml = true;
            mail.To.Add(fromaddress);
            foreach (var to in mailto)
            {
                mail.Bcc.Add(new MailAddress(to));
            }

            MailInfo info = new MailInfo();
            info.Host = host;
            info.DisplayName = displayName;
            info.From = fromaddress;
            info.IsSSL = true;
            info.Mail = mail;
            info.Password = pass;
            info.Port = port;
            Thread th = new Thread(new ParameterizedThreadStart(Send));
            th.Start(info);

            return true;
        }

        public static void Send(object minfo)
        {
            try
            {
                MailInfo info = (MailInfo)minfo;
                System.Net.Mail.SmtpClient smtp = new SmtpClient();
                smtp.UseDefaultCredentials = true;
                System.Net.NetworkCredential auth = new System.Net.NetworkCredential(info.From, info.Password);
                smtp.Credentials = auth;
                smtp.Host = info.Host;
                smtp.Port = info.Port;
                //smtp.EnableSsl = info.IsSSL;
                info.Mail.From = new MailAddress(info.From, info.DisplayName);
                smtp.Send(info.Mail);
            }
            catch (Exception)
            {

            }
        }

        public static SmtpSection GetMailConfig()
        {
            SmtpSection settings = (SmtpSection)ConfigurationManager.GetSection("system.net/mailSettings/smtp");
            return settings;
        }
    }
}
